import 'isomorphic-fetch';
import { ASYNC } from 'redux-amrc';
export const INCREMENT_COUNTER = 'INCREMENT_COUNTER';
export const DECREMENT_COUNTER = 'DECREMENT_COUNTER';

export function increment() {
  return {
    type: INCREMENT_COUNTER,
  };
}

export function decrement() {
  return {
    type: DECREMENT_COUNTER,
  };
}

export function incrementIfOdd() {
  return (dispatch, getState) => {
    const { async } = getState();

    if (async.counter.value % 2 === 0) {
      return;
    }

    dispatch(increment());
  };
}

export function incrementAsync(delay = 1000) {
  return dispatch => {
    setTimeout(() => {
      dispatch(increment());
    }, delay);
  };
}

// 编写redux-amrc定制的action创建函数。
export function load() {
  return {
    // ASYNC是redux-amrc提供的一个Symbol对象，
    // 用于让异步中间件从众多action创建函数中筛选出指定的action创建函数。
    // 它被作为对象的属性由action创建函数返回。该属性也接受一个对象，这个对象包含key和promise两个属性。

    [ASYNC]: {
      // key属性接受一个字符串。
      key: 'counter',

      // promise属性则接受一个函数。该函数的返回值是一个Promise对象。
      // 如果Promise对象被解决，那么已解决的数据最后会传递给Redux的state.async.[key]。
      // 如果Promise被拒绝，那么被拒绝的理由将会传递给Redux的state.async.loadState.[ key].error。
      promise: () => fetch('http://localhost:3000/api/counter', {mode: "no-cors"})
        .then(res => {
          debugger;
          if (!res.ok) {
            throw new Error(res.statusText);
          }
          return res.json();
        })
    }
  };
}
